﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////


#pragma once

#include "GcmpModelInterface.h"

namespace gcmp
{
    struct ShxFontInformation
    {
        ShxFontInformation(std::wstring fontName = L"", std::wstring shxType = L"") :FontName(fontName), ShxType(shxType) {}

        std::wstring FontName;   //shx字体名（字体文件名）
        std::wstring ShxType;    //shx字体类型,"AutoCAD-86 shapes 1.0" "AutoCAD-86 shapes 1.1" "AutoCAD-86 bigfont 1.0" "AutoCAD-86 unifont 1.0"
    };
    /// \brief  富文本字体配置
    ///
    /// GCMP提供实现，不允许外部派生。
    FINAL_INTERFACE class GCMP_MODEL_INTERFACE_EXPORT IDrawingRichTextFontsConfig
    {
    public:
        /// \brief 析构函数
        virtual ~IDrawingRichTextFontsConfig();

        /// \brief 获取字体管理器
        ///
        /// \return 字体管理器指针
        static IDrawingRichTextFontsConfig* Get();

        /// \brief 添加字体文件夹路径
        ///
        /// GCMP默认添加的字体文件夹路径:1.运行程序目录  2.运行程序下Fonts文件夹
        /// 可设置:1.绝对路径； 2.相对于运行程序目录的相对路径(如：RichTextConfig\Fonts)。
        /// 字体查找是按照路径添加顺序依次查找（运行程序目录 > 运行程序下的Fonts > 用户自定义字体目录（用户自定义目录添加顺序）> Windows自带的Fonts）
        /// \param fontsDirectory 富文本字体文件夹路径（绝对路径或相对运行程序目录的相对路径）
        /// \return true-设置成功；false-设置失败
        virtual bool AddFontsDirectory(const std::wstring& fontsDirectory) = 0;

        /// \brief 添加字体文件夹路径,并获得该目录下的字体信息
        ///
        /// GCMP默认添加的字体文件夹路径:1.运行程序目录  2.运行程序下Fonts文件夹
        /// 可设置:1.绝对路径； 2.相对于运行程序目录的相对路径(如：RichTextConfig\Fonts)。
        /// 字体查找是按照路径添加顺序依次查找（运行程序目录 > 运行程序下的Fonts > 用户自定义字体目录（用户自定义目录添加顺序）> Windows自带的Fonts）
        /// \param[in] fontsDirectory 富文本字体文件夹路径（绝对路径或相对运行程序目录的相对路径）
        /// \param[out] trueTypeFontNames 当前添加的字体目录fontsDirectory下的TrueType字体名集合。字串对（std::pair）的第一项为字体英文名，第二项为字体非英文名（具体取决于字体信息表中的语言）
        /// \param[out] shxFontInfomation 当前添加的字体目录fontsDirectory下的Shx字体信息
        /// \return true-设置成功；false-设置失败
        virtual bool AddFontsDirectory(const std::wstring& fontsDirectory, std::vector<std::pair<std::wstring, std::wstring>>& trueTypeFontNames, std::vector<ShxFontInformation>& shxFontInfomation) = 0;
        
        /// \brief 获得默认系统字体目录下的字体名
        ///
        /// Windows的Fonts目录字体默认添加
        /// \param[out] systemFontList 系统字体目下字体列表,字串对（std::pair）的第一项为字体英文名，第二项为字体非英文名（具体取决于字体信息表中的语言）
        /// \return void
        virtual void GetSystemFontNames(std::vector<std::pair<std::wstring, std::wstring>>& systemFontList) const = 0;

        /// \brief 添加字体文件夹路径,并获得该目录下的字体信息
        ///
        /// GCMP默认添加的字体文件夹路径:1.运行程序目录  2.运行程序下Fonts文件夹
        /// 可设置:1.绝对路径； 2.相对于运行程序目录的相对路径(如：RichTextConfig\Fonts)。
        /// 字体查找是按照路径添加顺序依次查找（运行程序目录 > 运行程序下的Fonts > 用户自定义字体目录（用户自定义目录添加顺序）> Windows自带的Fonts）
        /// \param[in] fontsDirectory 富文本字体文件夹路径（绝对路径或相对运行程序目录的相对路径）
        /// \param[out] trueTypeFontNames 当前添加的字体目录fontsDirectory下的TrueType字体名
        /// \param[out] shxFontInfomation 当前添加的字体目录fontsDirectory下的Shx字体信息
        /// \return true-设置成功；false-设置失败
        GCMP_OBSOLETE_API(2021/12/01, IDrawingRichTextFontsConfig::AddFontsDirectory(const std::wstring&, std::vector<std::pair<std::wstring, std::wstring>>&, std::vector<ShxFontInformation>&)) virtual bool AddFontDirectory(const std::wstring& fontsDirectory, std::vector<std::wstring>& trueTypeFontNames, std::vector<ShxFontInformation>& shxFontInfomation) = 0;

        /// \brief 获得默认系统字体目录下的字体名
        ///
        /// Windows的Fonts目录字体默认添加
        /// \param[out] systemFontList 系统字体目下字体列表
        /// \return void
        GCMP_OBSOLETE_API(2021/12/01, IDrawingRichTextFontsConfig::GetSystemFontNames(std::vector<std::pair<std::wstring, std::wstring>>&)) virtual void GetSystemFontNames(std::vector<std::wstring>& systemFontList) const = 0;
    };
}
